home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / parser / get_scan.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  1.1 KB  |  72 lines

  1. # include    <ingres.h>
  2. # include    "scanner.h"
  3. # include    <sccs.h>
  4.  
  5. SCCSID(@(#)get_scan.c    8.2    1/17/85)
  6.  
  7. /*
  8. ** GET_SCAN -- gets characters from monitor
  9. **
  10. **    Parameters:
  11. **        mode --
  12. **               modes are:
  13. **            NORMAL = read normally
  14. **            PRIME = prime the pipe
  15. **            SYNC = sync (or flush) the pipe
  16. **
  17. **    Returns:
  18. **        character or '\0' on eof
  19. **
  20. **    Trace Flags:
  21. **        Getscan ~~ 54.0
  22. */
  23.  
  24. get_scan(mode)
  25. int    mode;
  26. {
  27.     extern int        yyline;
  28.     register int        ctr;
  29.     char            c;
  30.  
  31.     extern int        Pctr;        /* vble for backup stack in scanner */
  32.     extern char        Pchar[2];
  33. # ifdef    xPTR3
  34.     tTfp(54, 0, "get_scan: mode %d ", mode);
  35. # endif
  36.  
  37.     switch (mode)
  38.     {
  39.         case NORMAL:
  40.         if (Pctr)
  41.         {
  42.             c = Pchar[--Pctr];
  43.             ctr = 1;
  44.         }
  45.         else
  46.             ctr = readmon(&c, 1);
  47.         if (c == '\n')
  48.             yyline++;
  49.         c = ((Lcase && c >= 'A' && c <= 'Z') ? (c + ('a' - 'A')) : c);
  50.         break;
  51.  
  52.         case PRIME:
  53.         Pctr = 0;
  54.         ctr = 0;
  55.         break;
  56.  
  57.         case SYNC:                /* flush pipe */
  58.         while (readmon(&c, 1) > 0);
  59.         ctr = 0;
  60.         break;
  61.  
  62.         default:
  63.         syserr("bad arg '%d' in get_scan", mode);
  64.     }
  65.  
  66. # ifdef    xPTR3
  67.     tTfp(54, 1, " ctr %d: '%c' (0%o).\n", ctr & I1MASK, c, c);
  68. # endif
  69.  
  70.     return (ctr ? c : 0);
  71. }
  72.